资源
课程
【UI】01 课:显示图片到屏幕上

创建一个 Widget Blueprint 类。

跟 Unity 里的 UI 系统好像……拖一张图调一调参数。

打开关卡蓝图。

节点里选择所创建的 Widget Blueprint。

Add to Viewport 节点即可显示 UI。

Add to Viewport 和 Add to Player Screen 在这里起同样的效果,仅在多人游戏时才会有区别。
【UI】02 课:UI 主菜单制作

创建一个 Pawn。

往这个 Pawn 里塞一个 Camera。

调整第三人称游戏场景,将 Player 0 交给这个摄像机。

创建一个 Widget Blueprint 类,设置一个 Vertical Box,里面放上三个按钮,设为 Fill,然后一阵操作。

此时就可以把按钮的事件整进 Widget Blueprint 类开始写按下按钮时的逻辑了。Get All Actor Of Class 蓝图通信一波,最后将控制权交给小白人。

退出游戏的逻辑。
【选看】03 课:使用多格式文本块

创建一个 Widget Blueprint 类。

创建一个 Data Table。

类别选择 RichTextStyleRow。

给这个 Data Table 加两行。操作一下这两行对应的文字属性。第一行名称最好是 Default。

设置字体时可以打开 Show Engine Content 以获取可用的字体。

Widget Blueprint 中创建一个 RichTextBlock,Text Style Set 选择创建的 Data Table,Text 里设置为:
1 | |
【UI】04 课:UI 动画和暂停游戏

创建一个 Widget Blueprint 类 Pause,绘制好 UI。

随便找一个蓝图(角色蓝图/关卡蓝图/自己建的蓝图,只要能接受输入就行),放上按下 Q 显示这个 UI 的逻辑。

WorldSettings 里创建一个新的 GameMode 以显示鼠标。

WorldSettings 里创建一个新的 PlayerController 以显示鼠标。

PlayerController 里将 Enable Click Events 打开。此时即可正确处理 UI。

接下来实现 UI 动画。左下角创建一个动画 Appear,之后类似 Pr 的方式设置 UI 的关键帧动画。

UI 蓝图里自定义事件 BeginAnim,触发这个事件时播放动画 Appear。

按下确认按钮时退出游戏。

按下继续游戏按钮时反方向播放动画,隐藏 UI。

修改角色蓝图中按下 Q 显示 UI 的逻辑。
【UI】05 课:3D UI 的交互和显示

创建一个 Widget Blueprint,绘制好 UI,两个 Button一个半透明 Border。

新建一个 Actor 蓝图,设置 Widget Class。里面添加 Widget 节点,Rendering 下的 Blend Mode 选择 Transparent。

User Interface 大小设与 UI 的大小一致。

在第一人称人物中,给枪下面安装节点 WidgetInteraction,调整 Transform,可以打开 Show Debug 以便于调试。

此时 WidgetInteraction 检测到 UI 对象就会显示红点。

编辑人物蓝图。
- 新建一个 bool 类型变量
IsFullyAutomatic,用于控制射击方式是全自动/半自动。 - 定义一个自定义事件
FullyAutomatic_Event,用于蓝图通信以设置IsFullyAutomatic。 - 定义一个自定义事件
EnableFullyAutomatic_Event,执行这个事件会开火,通过Set Timer by Function Name来实现全自动开火,Clear Timer by Function Name来实现停止开火。 Press Pointer Key和Release Pointer Key,来实现Widget Interaction获取到 UI 时鼠标点击事件。

设置 UI 的蓝图,按下按钮时设置事件。

要想纯用鼠标控制 3D UI,先自定义一个 PlayerController,应用之并将 EnableClickEvents 给我关了。

编辑这个 PlayerController 的蓝图,如此绘制之,并将 Interaction Source 设为 Mouse。

新建一个 pawn 类,里面添上 camera 并获取控制权,运行关卡,此时 3D UI 可以正确运行。
选看
【选看】多个界面切换和局域网联机

创建三个 Widget Blueprint:
FindServer查找服务器 UI。JoinServer显示服务器信息和加入按钮的 UI,放置在查找服务器 UI 的列表里。MainMenu主菜单 UI。

创建两个第三人称关卡:
MainMenu主菜单。GameMap游戏地图。

设计 MainMenu 的 UI 如图所示。

设置 FindServer 的 UI 如图所示,设计一个 ScrollBox 用于存放 JoinServer。

设置 JoinServer 的 UI 如图所示,可以加一个 Size Box 控制 UI 大小。

将 JoinServer 的 UI 的显示模式设置为 Desired,调整大小至原点。

JoinServer 下新建一个 String 类型的变量 Name,设为 public 和 Expose on Spawn。

将文字与 Name 绑定。

JoinServer 下新建一个 Blueprint Session 类型的变量 Server,设为 public 和 Expose on Spawn。

绘制 MainMenu 下按下创建房间按钮的逻辑。
Create Session是网络联机相关的内容。Open Level可以切换到名称为GameMap的关卡。

GameMap 里整俩出生点。

MainMap 的 Level Blueprint 显示 MainMenu 的 UI。

绘制 MainMenu 下按下打开服务器按钮的逻辑——清除所有 UI,然后显示 UI FindServer。

绘制 MainMenu 下按下打开退出游戏的逻辑 QuitGame。

绘制 FindServer 下按下返回按钮的逻辑——清除所有 UI,然后显示 UI MainMenu。

FindServer 下定义一个刷新服务器事件 FreshServer_Event。
Find Sessions查找可用连接。- 如果找到可用服务器,创建
JoinServer的 UI,设置其变量Server和Name的值,并将其放在Scroll Box的子类。

创建对象和按下刷新按钮时都可以触发这个事件。

创建 FindServer 下 CircularThrobber 的 Visibility 属性的绑定。

绑定的逻辑:如果 Scroll Box 下有子节点,则不显示,否则显示。

运行游戏时选择 Number of Players 为 2。

开跑!A 加入游戏后,B 就会显示 A 的服务器信息。

编写 JoinServer 中按下加入按钮的逻辑——JoinSession 即可加入。

开跑!
【选看】简易版本地存档、读档系统

创建两个 Widget Blueprint:SaveGame_UMG(存档界面)和 SaveGameSlot(存档项)。

SaveGameSlot 如此设计。

给 SaveGameSlot 设计两个变量(读档时设置这两个变量),String 类型的 Text 和 Vector 类型的 Location,并且都设置 Instance Editable 和 Expose on Spawn。

将 TextBlock 里的 Text 与变量 Text 绑定。

绘制 SaveGameSlot 里的蓝图,按下 Load_Btn 时执行读档操作,将 Third Person Character 的 Location 设为存档里的 Location。

绘制 SaveGame_UMG 的 UI 界面,其中的 Scroll Box 用于存放存档信息(SaveGameSlot),让信息放不下的时候显示滚动条。

创建一个 SaveGame 类,命名为 SaveGame_BP。

SaveGame_BP 里设计两个变量:String 类型的 SaveGameName 和 Vector 类型的 PlayerLocation。并且都是数组。

SaveGame_UMG 中将 ScrollBox 设为变量。

在关卡蓝图/角色蓝图中绘制读档界面的逻辑。

在关卡蓝图/角色蓝图中绘制按下 Tab 键存档的逻辑。

存档位置。

在关卡蓝图/角色蓝图中绘制按下 P 键显示/隐藏读档界面的逻辑。

开跑!